/**************************************************************************************************
* Title: SumBoundingCylinder.cpp
* Author: Gael Huber
* Description: A bounding cylinder
**************************************************************************************************/
#include "SumBoundingCylinder.h"

/**************************************************************************************************
* Default constructor
**************************************************************************************************/
BoundingCylinder::BoundingCylinder(void) 
{ }

/**************************************************************************************************
* Constructor specifying required fields
**************************************************************************************************/
BoundingCylinder::BoundingCylinder(const Vector3_16f& p, const Vector3_16f& a, float r, float h)
	: _position(p), _axis(a), _radius(r), _height(h)
{ }

/**************************************************************************************************
* Copy constructor
**************************************************************************************************/
BoundingCylinder::BoundingCylinder(const BoundingCylinder& rhs)
	: _position(rhs.position()), _axis(rhs.axis()), _radius(rhs.radius()), _height(rhs.height())
{ }

/**************************************************************************************************
* Destructor
**************************************************************************************************/
BoundingCylinder::~BoundingCylinder(void)
{ }

/**************************************************************************************************
* Assignment operator
**************************************************************************************************/
BoundingCylinder& BoundingCylinder::operator=(const BoundingCylinder& rhs) {
	// Self-assignment guard
	if(this == &rhs)
		return *this;

	// Assign and return
	_position = rhs.position();
	_axis = rhs.axis();
	_radius = rhs.radius();
	_height = rhs.height();
	return *this;
}

/**************************************************************************************************
* Equivalence operator
**************************************************************************************************/
bool BoundingCylinder::operator==(const BoundingCylinder& rhs) {
	return _position == rhs.position() && _axis == rhs.axis() && _radius == rhs.radius() && _height == rhs.height();
}

/**************************************************************************************************
* Non-equivalence operator
**************************************************************************************************/
bool BoundingCylinder::operator!=(const BoundingCylinder& rhs) {
	return _position != rhs.position() || _axis != rhs.axis() || _radius != rhs.radius() || _height != rhs.height();
}

/**************************************************************************************************
* Return position component
**************************************************************************************************/
Vector3_16f& BoundingCylinder::position(void) {
	return _position;
}

/**************************************************************************************************
* Return position
**************************************************************************************************/
const Vector3_16f& BoundingCylinder::position(void) const {
	return _position;
}

/**************************************************************************************************
* Return axis component
**************************************************************************************************/
Vector3_16f& BoundingCylinder::axis(void) {
	return _axis;
}

/**************************************************************************************************
* Return axis
**************************************************************************************************/
const Vector3_16f& BoundingCylinder::axis(void) const {
	return _axis;
}

/**************************************************************************************************
* Return radius
**************************************************************************************************/
float BoundingCylinder::radius(void) {
	return _radius;
}

/**************************************************************************************************
* Return radius
**************************************************************************************************/
float BoundingCylinder::radius(void) const {
	return _radius;
}

/**************************************************************************************************
* Return height
**************************************************************************************************/
float BoundingCylinder::height(void) {
	return _height;
}

/**************************************************************************************************
* Return height
**************************************************************************************************/
float BoundingCylinder::height(void) const {
	return _height;
}